package com.jt.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.anno.CacheFind;
import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.ItemCat;
import com.jt.util.ObjectMapperUtil;
import com.jt.vo.EasyUITree;

import redis.clients.jedis.Jedis;

@Service
public class ItemCatServiceImpl implements ItemCatService {

	@Autowired
	private ItemCatMapper itemCatMapper;
	@Autowired(required = false)
	private Jedis jedis;
	@Override
	public String findItemCatName(Long itemCatId) {

		return itemCatMapper.selectById(itemCatId).getName();
	}

	/**
	 * 返回一级商品分类信息的树形结构数据
	 * EasyUITree对象  数据库中查询的结果  ItemCat pojo对象
	 *   转化的思想 需要讲ItemCat对象转化为EasyUITree
	 */
	@Override
	@CacheFind
	public List<EasyUITree> findEasyUITreeByParentId(Long parentId) {
		//1.查询数据库动态获取POJO数据
		List<ItemCat> itemCatList = getItemCatList(parentId);

		//2.将POJO对象转化为VO对象
		List<EasyUITree> treeList = new ArrayList<>(itemCatList.size());
		for (ItemCat itemCat : itemCatList) {
			//如果是父级则closed,否则open
			String state = itemCat.getIsParent()?"closed":"open";
			EasyUITree easyUITree = new EasyUITree();
			easyUITree.setId(itemCat.getId())
			.setText(itemCat.getName())
			.setState(state);
			treeList.add(easyUITree);
		}
		return treeList;
	}

	private List<ItemCat> getItemCatList(Long parentId) {
		QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<ItemCat>();
		queryWrapper.eq("parent_id", parentId);
		return itemCatMapper.selectList(queryWrapper);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<EasyUITree> findItemCatListByCache(Long parentId) {

		long startTime = System.currentTimeMillis(); //1.准备动态的key 
		String
		key="com.jt.service.ItemCatServiceImpl.findItemCatListByCache::"+parentId;
		String json = jedis.get(key); 
		List<EasyUITree> list=new ArrayList<EasyUITree>(); 
		//2.判断json是否有数据
		if(StringUtils.isEmpty(json)) {
			//2.1没有数据，第一次查询 
			list=findEasyUITreeByParentId(parentId); long endTime =
					System.currentTimeMillis();
			System.out.println("数据库查询时间："+(endTime-startTime)); //转成json的形式，存入redis中
			String jsonData = ObjectMapperUtil.toJson(list); jedis.set(key, jsonData);
		}else { //2.2有数据，将数据转成对象 
			list = ObjectMapperUtil.toObject(json,
					list.getClass()); long endTime = System.currentTimeMillis();
					System.out.println("缓存查询时间："+(endTime-startTime)); } return list;

	}	
}
